package ar.org.cfired.creditos.servlets;
import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.Query;


import ar.org.cfired.creditos.Adjunto;
import ar.org.cfired.creditos.gui.Encabezado;
import ar.org.cfired.creditos.repositorios.Archivo;
import ar.org.cfired.creditos.repositorios.ArchivoNoEncontradoException;
import ar.org.cfired.creditos.repositorios.RepositorioException;
import ar.org.cfired.hibernate.utils.HibernateUtil;

public class ListaAdjuntos extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void init() throws ServletException {
	    // Initialization here...
	}
	
    public void service( HttpServletRequest req, HttpServletResponse res ) 
    throws ServletException 
  {
    	res.setContentType("text/html; charset=iso-8859-1"); 
	     PrintWriter out = null;
  try
     {
	  String cre_id = req.getParameter("cre_id");
	  String adj_id = req.getParameter("adj_id");
	  String varMeta;
	  
	  if (adj_id != null){
		  Session session = null;
		  if (!adj_id.equals("")) {
			    session = HibernateUtil.getSessionFactory().openSession();
				Transaction t = session.beginTransaction();
				Query q = session.createQuery("from Adjunto where adj_id=" + adj_id);
				Adjunto adj;
				adj = (Adjunto)q.uniqueResult();

				String filename = adj.getAdjRuta();
				String original_filename = adj.getAdjRuta().substring(adj.getAdjRuta().lastIndexOf("\\")+1);
				t.rollback();				  

			  
			   //res.setContentType("application/x-download");
			   //res.setHeader("Content-Disposition", "attachment; filename=" + adj.getAdjRuta().substring(adj.getAdjRuta().lastIndexOf("\\")));
			   //OutputStream out = res.getOutputStream();
			   //returnFile(adj.getAdjRuta(), out);  // Shown earlier in the chapter
		      //  File                f        = new File(filename);
		        int                 length   = 0;
		        ServletOutputStream op       = res.getOutputStream();
		        ServletContext      context  = getServletConfig().getServletContext();
		        String              mimetype = context.getMimeType( filename );
		       	
		        //
		        //  Set the response and go!
		        //
		        //
		        res.setContentType( (mimetype != null) ? mimetype : "application/octet-stream" );
//		        res.setContentLength( (int)f.length() );
		        res.setHeader( "Content-Disposition", "attachment; filename=\"" + original_filename + "\"" );

		        //
		        //  Stream to the requester.
		        //
		        Archivo archivoRepo = new Archivo();
		        archivoRepo.setExecutionID(Integer.valueOf(cre_id));
		        archivoRepo.setNombreArchivo(adj_id);
		        archivoRepo.setProceso("creditos");
		        archivoRepo.leer();
		        
		        
		        byte[] bbuf = new byte[1024];
		        //DataInputStream in = new DataInputStream(new FileInputStream(f));
		        DataInputStream in = new DataInputStream(archivoRepo.getArchivo());
		        int longitud = 0;
		        while ((in != null) && ((length = in.read(bbuf)) != -1))
		        {
		            op.write(bbuf,0,length);
		            longitud += length;
		        }
		        res.setContentLength( longitud );
		        in.close();
		        op.flush();
		        op.close();
			   
			   
			   
			   
		  }
	  }
	  else {
		  if (cre_id != null)
			  if (!cre_id.equals("")) {
			       	 //res.setContentType("text/html; charset=iso-8859-1"); 
				      out = res.getWriter();

				  Session session = HibernateUtil.getSessionFactory().openSession();
					Transaction t = session.beginTransaction();
					List<Adjunto> listaAdjuntos = (List<Adjunto>)session.createQuery("from Adjunto where cre_id=" + cre_id).list();
					Iterator<Adjunto> adjuntos = listaAdjuntos.iterator();
					Adjunto adj = null;	
					varMeta = Encabezado.meta();
					while (adjuntos.hasNext()) {
						adj = adjuntos.next();
					
						//out.print(adj.getAdjId() + "|" + adj.getAdjDescripcion() + "|" + adj.getAdjUsuario() + "|" + adj.getAdjFecha().toString().substring(0, 10) + "@");
					varMeta += adj.getAdjId() + "|" + adj.getAdjDescripcion() + "|" + adj.getAdjUsuario() + "|" + adj.getAdjFecha().toString().substring(0, 10) + "@";
					}
					varMeta += "</body></html>";
					out.print(varMeta);
					t.rollback();		
			  }
		  
	  }
     }
	  catch( IOException ioe )
	  {
	   //throw new ServletException( ioe );
		  CreditosServletWebException e2 = new CreditosServletWebException(ioe,"al cargar los adjuntos");
		  out.print(e2.getMessage());
		  ioe.printStackTrace();
	  }
	  catch( RepositorioException re) {
		  re.printStackTrace();
	  }
	  catch(ArchivoNoEncontradoException anee) {
		  anee.printStackTrace();
	  }

	}
		
		
	    public void destroy() {
			    // Cleanup here...
		  }



}
